module et {
    export abstract class IDeserializeSystem {
        get Type() {
            return Object.getPrototypeOf(this);
        }
        abstract run(o);
    }
    export abstract class DeserializeSystem<T> extends IDeserializeSystem {
        run(o): void {
            this.deserialize(o);
        }
        abstract deserialize(self: T): void;
    }
}